Chapter 13 — Advanced Analytics
Code Reference File — Copy and paste as needed

========================================
13.2.1 Total Revenue by Product Line
========================================
sales_model['Total Revenue by Product Line'] = (
    sales_model.groupby('Product Line')['Revenue'].transform('sum')
)
sales_model[['Product Line', 'Revenue', 'Total Revenue by Product Line']].head()

========================================
13.2.2 Average Quantity by Retailer Type
========================================
sales_model['Avg Qty by Retailer Type'] = (
    sales_model.groupby('Retailer Type')['Quantity Sold'].transform('mean')
)

========================================
13.3.1 Running Total
========================================
sales_model = sales_model.sort_values('Date')
sales_model['Running Revenue'] = sales_model['Revenue'].cumsum()
sales_model[['Date', 'Revenue', 'Running Revenue']].head(10)

========================================
13.3.2 Cumulative Quantity
========================================
sales_model['Cumulative Quantity'] = sales_model['Quantity Sold'].expanding().sum()

========================================
13.4.1 Revenue Rank
========================================
sales_model['Revenue Rank'] = sales_model.groupby('Product Line')['Revenue'].rank(
    method='dense', ascending=False
)

========================================
13.4.2 Row Number
========================================
sales_model['Row Number'] = sales_model.groupby('Product Line')['Revenue'].rank(
    method='first', ascending=False
)

========================================
13.5.1 7-Row Moving Average
========================================
sales_model['7D Moving Avg Revenue'] = sales_model['Revenue'].rolling(7).mean()

========================================
13.5.2 30-Row Rolling Quantity
========================================
sales_model['30D Rolling Qty'] = sales_model['Quantity Sold'].rolling(30).sum()

========================================
13.6.1 Lag
========================================
sales_model['Revenue Lag 1'] = sales_model['Revenue'].shift(1)

========================================
13.6.2 Day-to-Day Change
========================================
sales_model['Revenue Change'] = sales_model['Revenue'].diff()

========================================
13.6.3 Percentage Change
========================================
sales_model['Revenue % Change'] = sales_model['Revenue'].pct_change()

========================================
13.7.1 Running Revenue by Product Line
========================================
sales_model = sales_model.sort_values(['Product Line', 'Date'])
sales_model['Running Revenue by Product Line'] = (
    sales_model.groupby('Product Line')['Revenue'].cumsum()
)

========================================
13.8.1 Normalised Revenue
========================================
sales_model['Share of Product Line'] = (
    sales_model['Revenue'] /
    sales_model.groupby('Product Line')['Revenue'].transform('sum')
)

========================================
13.8.2 Z-Score
========================================
group_mean = sales_model.groupby('Product Line')['Revenue'].transform('mean')
group_std  = sales_model.groupby('Product Line')['Revenue'].transform('std')
sales_model['Z Score'] = (sales_model['Revenue'] - group_mean) / group_std

========================================
13.8.3 Percentile Rank
========================================
sales_model['Percentile Rank'] = sales_model.groupby('Product Line')['Revenue'].rank(pct=True)
